﻿using System;
using System.Collections.Generic;
using System.Diagnostics;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using static System.Net.Mime.MediaTypeNames;

namespace Game
{
	public class Watchdog
	{
		private const int 超时时间 = 6543; // 设置超时时间（毫秒）
		private static Timer 狗; // 用于检测超时的定时器
		private static DateTime _lastResponseTime; // 上次应用程序响应的时间

		public void 看门狗()
		{
			_lastResponseTime = DateTime.Now;
			狗 = new Timer(狗_看, null, 超时时间,超时时间);
		}
		private void 狗_看(object state)
		{
			// 检查是否超过超时时间
			if ((DateTime.Now - _lastResponseTime).TotalSeconds > 超时时间)
			{
				// 记录日志或执行其他清理操作
				Log.Error("应用程序未响应，准备重启...");
				// 重启应用程序
				重启游戏进程();
			}
		}
		public static void 重启游戏进程()
		{
			try
			{
				// 重启应用程序
				// 获取当前进程的完整路径
				var currentProcess = Process.GetCurrentProcess();
				var startInfo = currentProcess.StartInfo;

				// 创建一个新的进程启动信息，包括相同的命令行参数
				/*
				ProcessStartInfo newStartInfo = new(startInfo.FileName, startInfo.Arguments)
				{
					UseShellExecute = false,
					WorkingDirectory = startInfo.WorkingDirectory
				};
				Process.Start(newStartInfo); */
				Process.Start(Process.GetCurrentProcess().MainModule.FileName);
				Environment.Exit(19);
			}
			catch (Exception ex)
			{
				// 记录重启失败的日志
				Log.Error("重启应用程序失败: " + ex.Message);
			}
		}

		// 调用此方法以标记应用程序已响应
		public static void 响应()
		{
			_lastResponseTime = DateTime.Now;
		}
	}
}
